package com.dropdb.demo.service;


import com.dropdb.demo.bean.bo.*;
import com.dropdb.demo.bean.vo.BaseRespVO;

/**
 * @author:tanxin Desc: 购物车index
 * @date:2020/6/30 11:48
 */
public interface WxCartService {
    //查询加入购物车的商品list 和 商品对应的规格

    /**
     * 返回购物车列表
     * @param userId 当前登录的用户id
     * @return 返回查询购物车的相关数据
     */
    CartDataBO queryCartIndex(Integer userId);

    /**
     * 更新商品的选择状态
     * @param userId 用户id
     * @return 返回商品相关数据
     */
    CartDataBO updateCartChecked(Integer userId, ProductIdsBO productIds);

    /**
     * 查询购物车商品数量
     * @param userId 用户id
     * @return 返回购物车商品数量
     */
    int queryCartGoodsCount(Integer userId);

    /**
     * 更新购物车中商品数量
     * @param userId 用户id
     * @param cartUpdateBO {"productId":xx,"goodsId":xx,"number":xx,"id":xx}
     */
    void updateCart(Integer userId, CartUpdateBO cartUpdateBO);

    /**
     * 删除购物车商品，并返回余下商品
     * @param userId 用户id
     * @param cartDeleteBO 待删除的的商品list
     * @return 返回购物车余下的商品
     */
    CartDataBO deleteCartByProductId(Integer userId, CartDeleteBO cartDeleteBO);

    /**
     * @param cartId 购物车id
     * @param addressId 地址id
     * @param couponId 消费券id
     * @param grouponRulesId 团购规则id
     * @return 下单页所有数据
     */
    CheckOutDataBO checkout(Integer userId, Integer cartId, Integer addressId, Integer couponId, Integer grouponRulesId);

    /**
     * 添加商品至购物车
     * @param userId 用户id
     * @param addCartBO {"goodsId":xxx,"number":xx,"productId":xxx}
     */
    int add2Cart(Integer userId, AddCartBO addCartBO);

    /**
     * @param userId 用户id
     * @param addCartBO {"goodsId":xxx,"number":xx,"productId":xxx}
     * @return 商品在购物车中的cartId
     */
    BaseRespVO fastAdd(Integer userId, AddCartBO addCartBO);
}
